package com.whfc.mach.dao;

import com.whfc.mach.dto.AppMachDTO;
import com.whfc.mach.dto.MachDataDTO;
import com.whfc.mach.entity.AppMachData;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.Date;
import java.util.List;

public interface AppMachDataMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(AppMachData record);

    int insertSelective(AppMachData record);

    AppMachData selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(AppMachData record);

    int updateByPrimaryKey(AppMachData record);

    /**
     * 插入 or 更新
     *
     * @param record
     * @return
     */
    int insertOrUpdate(AppMachData record);

    /**
     * 查找地图页设备列表
     *
     * @param deptIds
     * @param corpIds
     * @param machTypeIds
     * @param keyword
     * @param bindFlag
     * @param netState
     * @param workState
     * @return
     */
    List<AppMachDTO> selectMapMachList(@Param("deptIds") List<Integer> deptIds,
                                       @Param("corpIds") List<Integer> corpIds,
                                       @Param("machTypeIds") List<Integer> machTypeIds,
                                       @Param("keyword") String keyword,
                                       @Param("bindFlag") Integer bindFlag,
                                       @Param("netState") Integer netState,
                                       @Param("workState") Integer workState);

    /**
     * 查询机械云管家数据
     *
     * @param deptIds
     * @param keyword
     * @param startTime
     * @param endTime
     * @return
     */
    List<AppMachDTO> selectMachData(@Param("deptIds") List<Integer> deptIds,
                                    @Param("keyword") String keyword,
                                    @Param("startTime") Date startTime,
                                    @Param("endTime") Date endTime);

    /**
     * 根据设备id查找设备最新数据
     *
     * @param machId
     * @return
     */
    AppMachData selectByMachId(@Param("machId") Integer machId);

    /**
     * 批量更新设备的在线状态为离线
     *
     * @param machIds
     * @return
     */
    int batchUpdateNetStateOffline(@Param("machIds") List<Integer> machIds);

    /**
     * 批量更新OBD设备的在线状态为离线
     *
     * @param machIds
     * @return
     */
    int batchUpdateObdNetStateOffline(@Param("machIds") List<Integer> machIds);

    /**
     * 查找不同状态的设备数
     *
     * @param deptIds
     * @param workState
     * @return
     */
    Integer countMachNumByWorkState(@Param("deptIds") Collection<Integer> deptIds,
                                    @Param("workState") Integer workState);

    /**
     * 查找要变为离线状态的obd设备
     *
     * @param deptIds
     * @return
     */
    List<Integer> selectObdNetState2OfflineMachList(@Param("deptIds") List<Integer> deptIds);

    /**
     * 查找要变为离线状态的设备
     *
     * @return
     */
    List<Integer> selectNetState2OfflineMachList();

    /**
     * 根据machId逻辑删除
     *
     * @param machId
     */
    void deleteByMachId(@Param("machId") Integer machId);

    /**
     * 查找绑定的设备
     *
     * @param deptIds
     * @param keyword
     * @param deviceType
     * @return
     */
    List<AppMachDTO> selectBindMachList(@Param("deptIds") List<Integer> deptIds,
                                        @Param("keyword") String keyword,
                                        @Param("deviceType") Integer deviceType);


    /**
     * 查找地图页设备列表
     *
     * @param deptIds
     * @param corpIds
     * @param machTypeIds
     * @param keyword
     * @param bindFlag
     * @param netState
     * @param workState
     * @return
     */
    List<AppMachDTO> selectMapMachListV2(@Param("deptIds") List<Integer> deptIds,
                                         @Param("corpIds") List<Integer> corpIds,
                                         @Param("machTypeIds") List<Integer> machTypeIds,
                                         @Param("keyword") String keyword,
                                         @Param("bindFlag") Integer bindFlag,
                                         @Param("netState") Integer netState,
                                         @Param("workState") Integer workState);
}